/-docs
/-editor
/-files
/-files-old
/-imports
/-layout
/-storage ...
/-storage/attached ...
/-storage/attached/api
/-storage/attached/dom ...
DetectStorage.ts
LoadStorage.ts
UpdateStorage.ts
/-storage/attached/indexedDB
/-storage/attached/localStorage
/-storage/attached/webSQL
/-tests
/-tests/files
/-tests/storage
/-tests/storage/attached
AttachedStorageTests.ts
DomStorageTests.ts
IndexedDBStorageTests.ts
LocalStorageStorageTests.ts
WebSQLStorageTests.ts
TestCase.html
TestCase.ts
TestPage.css
TestPage.html
TestPage.ts
_sampleTests.ts
/-typings
TypeScriptService.ts
functions.ts
ko.ts
persistence.api.ts
persistence.ts
shell.ts
teapo.html
teapo.js
teapo.ts
xxxxxxxxxx
1
module teapo.storage.attached.dom {
2
3
  export class LoadStorage implements attached.LoadStorage {
4
5
    editedUTC: number;
6
7
    private _byName: { [fullPath: string]: HTMLElement; } = {};
8
9
    constructor(
10
      private _parentElement: HTMLElement,
11
      private _document: { createElement(tag: string): HTMLElement; }) {
12
13
      // populate editedUTC from corresponding attribute
14
      var editedUTCValue = this._parentElement.getAttribute('editedUTC');
15
      if (editedUTCValue) {
16
        try {
17
          this.editedUTC = parseInt(editedUTCValue);
18
        }
19
        catch (parseEditedUTCError) {
20
          console.log('parsing editedUTC ' + parseEditedUTCError);
21
        }
22
      }
23
    }
24
25
    load(recipient: LoadStorageRecipient): void {
26
      this._loadFromElement(this._parentElement, recipient);
27
      var updater = new UpdateStorage(this._parentElement, this._byName, this._document);
28
      recipient.completed(updater);
29
    }
30
31
    migrate(
32
      editedUTC: number,
33
      filesByName: { [fullPath: string]: { [propertyName: string]: string; }; },
34
      callback: (error: Error, updater: attached.UpdateStorage) => void): void {
35
36
      this._parentElement.innerHTML = '';
37
      if (editedUTC)
38
        this._parentElement.setAttribute('editedUTC', editedUTC+'');
39
40
      // clear out the attributes too
41
      var attrs = [];
42
      for (var i = 0; i < element.attributes.length; i++) {
43
        attrs[i] = element.attributes.item(i);
44
      }
45
      for (var i = 0; i < attrs.length; i++) { 
46
        if (attrs[i].name && startsWith(attrs[i].name, 'data-meta-'))
47
          element.removeAttribute(attrs[i].name);
48
      }
49
50
      this._byName = {};
51
52
      for (var fullPath in filesByName) if (filesByName.hasOwnProperty(fullPath)) {
53
        var element = UpdateStorage.createElement(this._parentElement, fullPath, this._document);
54
        this._byName[fullPath] = element;
55
      }
56
57
      var updater = new UpdateStorage(this._parentElement, this._byName, this._document);
58
59
      callback(null, updater);
60
    }
61
62
63
    private _loadFromElement(element: Element, recipient: LoadStorageRecipient) {
64
65
      var fullPath = element.getAttribute('data-path');
66
      if (!fullPath) {
67
        for (var i = 0; i < element.childNodes.length; i++) {
68
          var child = <Element>element.childNodes.item(i);
69
          if (child.tagName)
46:49